package com.climber.android.component.webview.mvp.contract

import com.climber.android.component.webview.mvp.ui.base.BaseWebActivity

import io.ganguo.library.dswebview.DSWebView
import io.ganguo.library.mvp.ui.mvp.IModel
import io.ganguo.library.mvp.ui.mvp.IView

/**
 * Created by Mikes at 2019/5/5 11:35 AM
 * 展示 Contract 的用法
 * Contract 是一个契约，将Model、View、Presenter 进行约束管理，方便后期类的查找、维护。
 *
 */
interface BaseWebContract {
    //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
    interface View : IView {
        fun getActivity(): BaseWebActivity

        /**
         * 是否可以在onPageFinished设置标题
         */
        fun isSupportDynamicTitle(): Boolean

        fun getWebView(): DSWebView
        fun killMyself()

        fun preferHtmlUrl(): String

        fun showWebLoading()
        fun hideWebLoading()

        fun showLoadingAnim(): Boolean {
            return false
        }

        fun updateWebCloseBtnVisibility(isShowCloseBtn: Boolean)
        fun setWebTitle(title: String)
        fun initIntentData()
        fun injectWebInitData()
        fun handleJavaScript() {

        }

        fun webViewShown() {

        }

        fun showWebViewError(preferHtmlUrl: String)
    }

    //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,如是否使用缓存
    interface Model : IModel {
        fun printTest()
    }
}
